package controller;

import java.awt.HeadlessException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import models.Atividade;
import utils.conexao.DataBase;
import utils.conexao.DataBaseFactory;
import utils.observer.entity.EntitySubject;

public class AtividadeDAO {

    private static AtividadeDAO instance;
    private EntitySubject subject;
    
    public EntitySubject getSubject(){
        return this.subject;
    }
    
    private AtividadeDAO(){
        subject = new EntitySubject();
    }
    
    public static AtividadeDAO getInstance(){
        if( instance == null ){
            instance = new AtividadeDAO();
        }
        
        return instance;
    }
    
    
    public static void inserir(Atividade a) {
        try {
            if (!DataBaseFactory.getConexao().persistir(a)) {
                JOptionPane.showMessageDialog(null, "Não foi possível inserir a Pessoa.");
            }
            
            getInstance().getSubject().notifyObservers();
        } catch (IllegalArgumentException | IllegalAccessException | DataBase.DataBaseIDException | DataBase.DataBaseDuplicateIDDeclarationException | HeadlessException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
    }

    public static void alterar(Atividade a) {
        try {
            if (!DataBaseFactory.getConexao().persistir(a)) {
                JOptionPane.showMessageDialog(null, "Não foi possível alterar a Pessoa.");
            }
            
            getInstance().getSubject().notifyObservers();
        } catch (IllegalArgumentException | IllegalAccessException | DataBase.DataBaseIDException | DataBase.DataBaseDuplicateIDDeclarationException | HeadlessException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
    }

    public static void excluir(Atividade a) {
        try {
            DataBaseFactory.getConexao().excluir(a);
            
            getInstance().getSubject().notifyObservers();
        } catch (DataBase.DataBaseDuplicateIDDeclarationException | DataBase.DataBaseIDException | IllegalArgumentException | IllegalAccessException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
    }
    
    public static ArrayList<Atividade> getAtividades(int CodigoProjeto) {
        ArrayList<Atividade> atividades = DataBaseFactory.getConexao().getAll(Atividade.class);
        
        ArrayList<Atividade> retorno = new ArrayList<>();
        
        for (Atividade atividade : atividades) {
            if( atividade.getCodigoProjeto() == CodigoProjeto ){
                retorno.add(atividade);
            }
        }
        return retorno;
    }
}